home *** CD-ROM | disk | FTP | other *** search
- /*
- * Bitmap to LaTeX Sprite
- * by Marc David Rovner (mrovner@ic.sunysb.edu)
- * June 7th, 1992
- */
-
- #include <stdio.h>
- #include <stdlib.h>
-
- #define MAXFILENAME 1024
- #define INITWIDTH 1.5
- #define INITHEIGHT 1.5
-
- typedef struct {
- char OutFileName[MAXFILENAME];
- float WidthRatio, HeightRatio;
- } ConvInfo;
-
- void conv_bitmap(Stuff,bitmapfile,spritefile,spritename)
- ConvInfo Stuff;
- FILE *bitmapfile, *spritefile;
- char *spritename;
- { char buffer0[80], buffer1[80], temp;
- int width, height, Row, Column, byte, i;
-
- if ( (fscanf(bitmapfile, "%s %s %i", buffer0, buffer1, &width) == EOF)
- || (fscanf(bitmapfile, "%s %s %i", buffer0, buffer1, &height) == EOF) )
- {
- fprintf(stderr, "File not correct bitmap file.\n");
- fclose(bitmapfile);
- exit(-1);
- }
- do
- {
- fscanf(bitmapfile, "%s", buffer0);
- }
- while (buffer0[0] != '{');
-
- fprintf(spritefile,"\\sprite{\\%s}(%i,%i)[%.3fin,%.3fin]\n",
- spritename, width, height,
- ((width * Stuff.WidthRatio)/160.0),
- ((height * Stuff.HeightRatio)/160.0) );
-
- for (Row = 0; Row < height; ++Row)
- {
- fprintf(spritefile,":");
- for (Column = 0; Column < width; Column = Column + 8)
- {
- if (fscanf(bitmapfile, "%i%c ", &byte, &temp) == EOF)
- {
- fprintf(stderr, "File not correct bitmap file.\n");
- fclose(bitmapfile);
- exit(-1);
- }
- for(i = 0; i<= 7; i++)
- {
- if ( (byte >> i) & 1)
- {
- fprintf(spritefile,"B");
- }
- else
- {
- fprintf(spritefile,".");
- }
- }
- }
- fprintf(spritefile," |\n");
-
- }
- fprintf(spritefile,"\\endsprite\n");
-
- fclose(bitmapfile);
- }
-
- void main(argc,argv)
- int argc; char *argv[];
- { ConvInfo Stuff;
- FILE *bitmapfile, *spritefile;
- int filestatus;
- char *c;
-
-
- /* Assign initial values to conversion information record */
- Stuff.WidthRatio=INITWIDTH;
- Stuff.HeightRatio=INITHEIGHT;
- sprintf(Stuff.OutFileName,"\0");
-
- /* While there are still command line options...*/
- while (--argc>0 && (*++argv)[0] == '-')
- {
- c = ++(*argv);
-
- /* User is redefining the width ratio */
- if (strcmp("width",c) == 0)
- {
- --argc; (*++argv);
- Stuff.WidthRatio= atof(*argv);
- }
-
- /* User is redefining the height ratio */
- else if (strcmp("height",c) == 0)
- {
- --argc; (*++argv);
- Stuff.HeightRatio= atof(*argv);
- }
-
- /* User is naming a file to put the output in */
- else if (strcmp("output", c) == 0)
- {
- --argc; (*++argv);
- strcpy(Stuff.OutFileName, *argv);
- }
-
- /* User has given an invalid option */
- else
- {
- fprintf(stderr,"usage:\n bit2spr [-width width] [-height height] [-output outputfile] [bitmapfiles]\n");
- exit(-1);
- }
- }
-
- /* Test to see if the user gave an output file */
- if (strcmp("\0", Stuff.OutFileName) != 0)
- {
- /* User did, so try to open it for writing */
- if ( (spritefile = fopen(Stuff.OutFileName, "wt")) == NULL)
- {
- /* Open failed, tell user and quit */
- fprintf(stderr,"Cannot open output file %s\n",Stuff.OutFileName);
- exit(-1);
- }
- /* Open sucess */
- else fprintf(stderr,"Writing to %s\n",Stuff.OutFileName);
- }
-
- /* User didn't supply an output file, so send output to
- * standard output (usually the screen)
- */
- else spritefile = stdout;
-
-
- /* Test to see if user supplied files to be read... */
- if (argc == 0)
- /* User didn't, so get files from stardard input */
- conv_bitmap(Stuff,stdin,spritefile,"Dummy\0");
-
- /* User did supply files to be read, so while there are still name */
- else while (--argc>=0)
- {
- /* ...try opening current file for reading */
- if ( (bitmapfile=fopen(*argv,"r")) == NULL)
- /* Error opening file for read, so tell user & continue */
- fprintf(stderr,"%s doesn't exists.\n",*argv);
- /* Success opening file, so convert it */
- else
- {
- fprintf(stderr,"Converting %s...\n", *argv);
- conv_bitmap(Stuff,bitmapfile,spritefile,*argv);
- }
-
- /* move to next name */
- (*++argv);
- }
- }
-
-